<template>
  <!-- 主容器 -->
  <el-container class="main-class">
    <!-- 头部 -->
    <el-header>
      <!-- 头像 -->
      <el-col :span="2" class="el-header-1">
        <el-avatar
          :size="50"
          :src="avatar.startsWith('https') ? avatar : $qiniu + avatar"
        />
      </el-col>
      <el-col :span="15" class="title">
        健康计划定制后台 <span>————{{ nickName }}({{ name }})</span>
      </el-col>
      <!-- 退出 -->
      <el-col :span="7" class="logout">
        <el-button type="info" @click="logout">退出登录</el-button>
      </el-col>
    </el-header>

    <!-- 主体信息 -->
    <el-container>
      <!-- 侧边栏 -->
      <el-aside :width="menuActive ? '200px' : '60px'">
        <transition>
          <div class="menu-button" @click="menuActive = !menuActive">
            <i class="el-icon-s-fold"></i>
          </div>
        </transition>

        <el-menu
          :default-active="activePath"
          class="el-menu-vertical-demo"
          background-color="#545c64"
          text-color="#fff"
          active-text-color="#ffd04b"
          unique-opened
          router
          :collapse="!menuActive"
        >
          <!-- 一级菜单 -->
          <el-submenu
            :index="index + ''"
            v-for="(parentMenu, index) in menus"
            :key="index"
          >
            <template slot="title">
              <i :class="parentMenu.icon" style="margin-right: 10px" />
              <span>{{ parentMenu.title }}</span>
            </template>
            <el-menu-item-group>
              <el-menu-item
                :index="childrenMenu.path"
                v-for="(childrenMenu, i) in parentMenu.children"
                :key="i"
                @click="savePath(childrenMenu.path)"
              >
                <template slot="title">
                  <i :class="childrenMenu.icon" style="margin-right: 10px" />
                  <span>{{ childrenMenu.title }}</span>
                </template>
              </el-menu-item>
            </el-menu-item-group>
          </el-submenu>
        </el-menu>
      </el-aside>

      <!-- 主体 -->
      <el-main>
        <el-breadcrumb separator-class="el-icon-arrow-right">
          <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
          <!-- 遍历$router.currentRoute.matched -->
          <el-breadcrumb-item
            v-for="(item, index) in $router.currentRoute.matched"
            :key="index"
            >{{ item.meta.title }}</el-breadcrumb-item
          >
        </el-breadcrumb>
        <span v-show="$router.currentRoute.path === '/'" class="main-title"
          >欢迎使用!</span
        >
        <!-- 作为主体的子路由 -->
        <router-view />
      </el-main>
    </el-container>
  </el-container>
</template>

<script>
// 获取用户信息需要引入
import { mapState } from "vuex";

export default {
  // vue计算属性
  computed: {
    ...mapState(["name", "avatar", "menus", "nickName"]),
  },
  created() {
    console.log("用户名", this.name);
    console.log("菜单", this.menus);
    console.log("昵称", this.nickName);
  },
  data() {
    return {
      // 是否展开菜单
      menuActive: true,
      // 激活菜单
      activePath: sessionStorage.getItem("activePath"),
    };
  },
  methods: {
    logout() {
      this.$confirm("您将退出系统, 是否继续?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          // 调后台退出接口
          this.$ajax.get("/user/logout").then((res) => {
            // 清空本地缓存
            sessionStorage.clear();
            // 跳转到登录页面
            this.$router.replace("/login");
            this.$message.success(res.data.message);
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消",
          });
        });
    },

    /** 保存被激活的链接 */
    savePath(path) {
      sessionStorage.setItem("activePath", path);
      this.activePath = path;
    },
  },
};
</script>

<style scoped>
/* scoped 受保护的样式，当前style标签的样式只在当前组件生效，其他组件无法使用，避免样式污染 */
.el-header,
.el-footer {
  background-color: #b3c0d1;
  color: #333;
  text-align: center;
  line-height: 60px;
}

.el-aside {
  background-color: #545c64;
  color: #333;
}

.el-main {
  background-color: #e9eef3;
  color: #333;
  text-align: center;
}

/* 主容器样式 */
.main-class {
  height: 100%;
}

.el-header-1 {
  margin-top: 5px;
  height: 100%;
}

.title {
  text-align: left;
  font-size: 25px;
  font-family: 微軟正黑體;
}

.logout {
  text-align: right;
}

.menu-button {
  font-size: 20px;
  background-color: #212938;
  color: white;
  cursor: pointer;
}

.main-title {
  font-size: 50px;
  font-family: 微軟正黑體;
}

.el-submenu .el-menu-item {
  padding: 0;
}
</style>
